package com.resou.reader.api.service;

import com.resou.reader.api.entry.ActivityBean;
import com.resou.reader.api.entry.BookCategoryData;
import com.resou.reader.api.entry.BookLabelBean;
import com.resou.reader.api.entry.BookListBean;
import com.resou.reader.api.entry.BookListCommentBean;
import com.resou.reader.api.entry.BookStoreMainBean;
import com.resou.reader.api.entry.CarousePicBean;
import com.resou.reader.api.entry.ChannelBean;
import com.resou.reader.api.entry.ChoiceneBookListBean;
import com.resou.reader.api.entry.CommonData;
import com.resou.reader.api.entry.DisCoveryBean;
import com.resou.reader.api.entry.FinishedBookBean;
import com.resou.reader.api.entry.MyBookListBean;
import com.resou.reader.api.entry.RankTypeBean;
import com.resou.reader.api.entry.Result;
import com.resou.reader.api.entry.ResultList;
import com.resou.reader.api.entry.SortDataBean;
import com.resou.reader.api.entry.SortSubBean;
import com.resou.reader.api.entry.TypeResultBean;
import com.resou.reader.view.booklebel.LabelBean;
import com.resou.reader.view.booklebel.LabelNameBean;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * Created by ${Garrett} on 2018/9/14.
 * Contact me krouky@outlook.com
 */
public interface StoreService {

    //https://rs.resouxs.com//book/allcategory

    /**
     * 获取所有分类
     */
    //JsonObject
    @GET("book/appCategory")
    Observable<Result<List<SortDataBean<List<SortSubBean>>>>> appCategory();

    /**
     * 完结书籍
     *
     * @param page     是
     * @param pagesize 否  每页获取的书籍数量  默认为 20
     * @param token    否 已登录的用户需传入
     * @return
     */
    @GET("book/finishedBooks")
    Observable<Result<FinishedBookBean>> finishedBooks(@Query("page") int page, @Query("pagesize") int pagesize, @Query("token") String token);

    /*
     * 示例url https://rs.resouxs.com/book/searchbycategory?subcateid=&cateid=20059&type=1&page=1&pagesize
     */

    /**
     * 分类查询书籍列表searchbycategory
     * 如果根据三级分类查询，那么只要传入subcateid 参数即可。
     * 如果根据二级分类查询，那么必须同时传入cateid 以及 type 这 2 个参数，此时 subcateid不传值。
     *
     * @param subcateid 否 三级分类 id
     * @param cateid    否 二级分类 id
     * @param type      否 一级分类枚举值  1：男频 2：女频
     * @param page      否 页码
     * @param pagesize  否 每页获取的书籍数量  默认为 20  最大值不超过 50
     * @return
     */
    @GET("book/searchbycategory")
    Observable<Result<BookCategoryData>> searchbycategory(@Query("subcateid") int subcateid, @Query("cateid") int cateid
            , @Query("type") int type, @Query("page") int page, @Query("pagesize") int pagesize);

    /**
     * 分类查询书籍列表searchbycategory
     *
     * @param categoryId   二级分类Id
     * @param secId        三级分类
     * @param totalWord    字数
     * @param readingNum   最热
     * @param serialStatus 完结穿3  连载 1
     *                     不管包月
     * @param size
     * @param page
     * @return
     */
    @GET("category/bookList")
    Observable<Result<BookCategoryData>> quearTypeBook(@Query("categoryId") String categoryId, @Query("secId") String secId
            , @Query("totalWord") String totalWord, @Query("readingNum") String readingNum, @Query("serialStatus") String serialStatus, @Query("page") int page, @Query("size") int size);

    /**
     * 免费书籍
     *
     * @param page     是
     * @param pagesize 否  每页获取的书籍数量  默认为 20
     * @param token    否 已登录的用户需传入
     */
    @GET("book/freeBooks")
    Observable<Result<FinishedBookBean>> freeBooks(@Query("page") int page, @Query("pagesize") int pagesize, @Query("token") String token);
//    http://47.105.43.74:8088/mobileserver/book/typelistForIndex

//    /**
//     * 排行榜页面(书城首页)
//     *
//     * @return
//     */
//    @GET("book/typelistForIndex")
//    Observable<Result<CommonData<BookStoreMainBean>>> typelistForIndex();

    /**
     * 免费
     *
     * @param typeId 是 榜单分类
     * @param page   是 页码，从0开始
     * @param token  否 已登录用户需传入
     * @return
     */
    @GET("book/freeTypeList")
    Observable<Result<List<TypeResultBean>>> freeList(@Query("typeId") int typeId, @Query("gender") String gender, @Query("page") int page, @Query("pageSize") int pageSize, @Query("token") String token);
    /**
     * 排行榜频道接口
     *
     * @return
     */
    @POST("ranking/channel")
    Observable<Result<List<ChannelBean>>> rankChannel();

    /**
     * 排行榜类型
     *
     * @param rankChannel 榜单频道，榜单频道接口返回的channelCode
     * @return
     */
    @POST("ranking/type/list")
    Observable<Result<List<RankTypeBean>>> rankType(@Query("rankChannel") String rankChannel);

    /**
     * 排行榜页面
     *
     * @param rankType 是 榜单分类
     * @param page   是 页码，从0开始
     * @param token  否 已登录用户需传入
     * @return
     */
    @POST("ranking/type/books")
    Observable<Result<TypeResultBean>> typelist(@Query("rankType") String rankType,
                                                @Query("page") int page,
                                                @Query("token") String token);

    /**
     * 查询精品书单首页信息
     *
     * @param gender   所属频道，默认为1，男频传1,女频传2
     * @param type     推荐类型,筛选类型"推荐"下的TypeCode
     * @param category 分类,多个选择以,拼接
     * @param label    标签,多个选择以,拼接
     * @param page     页数，从0开始，默认为0
     * @param pageNum  每页条数，默认为10
     * @param token
     * @return
     */
    @GET("bookList/main")
    Observable<Result<ChoiceneBookListBean>> quearBookList(@Query("gender") String gender, @Query("type") String type, @Query("category") String category, @Query("label") String label, @Query("page") int page, @Query("pageNum") int pageNum, @Query("token") String token);


    /**
     * 查询发现页面的列表数据
     *
     * @param token
     * @return
     */
    @GET("queryMenulist")
    Observable<Result<List<DisCoveryBean>>> quearDiscoveryData(@Query("token") String token, @Query("type") String type);

    /**
     * 查询发现页面的礼品活动
     *
     * @param token
     * @return
     */
    @POST("fifteenthree/checkfifteenthree")
    Observable<Result<List<ActivityBean>>> quearDiscoveryActivity(@Header("token") String token);

    /**
     * * 获取精品书单中的标签
     *
     * @param gender 性别
     * @param token
     * @return
     */
    @GET("bookList/filter")
    Observable<Result<List<BookLabelBean>>> quearLabel(@Query("gender") int gender, @Query("token") String token);


    /**
     * 书单评论列表接口
     *
     * @param bookListId 书单ID
     * @param page       页数，从0开始，默认为0
     * @param pageNum    每页条数，默认为10
     * @param token
     * @return
     */
    @GET("bookList/comment")
    Observable<Result<BookListCommentBean>> commentBook(@Query("bookListId") String bookListId, @Query("page") int page, @Query("pageNum") int pageNum, @Query("token") String token);


    /**
     * 查询书单详情信息
     *
     * @param token
     * @param bookListId 书单ID
     * @param page       页数，从0开始，默认为0
     * @param pageNum    每页条数，默认为10
     * @return
     */
    @POST("bookList/detail")
    Observable<Result<BookListBean>> quearBookDetail(@Header("token") String token, @Query("bookListId") String bookListId, @Query("page") int page, @Query("pageNum") int pageNum);


    /**
     * 书单书籍点赞
     *
     * @param token
     * @param bookId 书籍ID
     * @return
     */
    @POST("bookList/bookLike")
    Observable<Result> bookLike(@Header("token") String token, @Query("bookId") String bookId);


    /**
     * 书单书籍取消点赞
     *
     * @param token
     * @param bookId 书单ID
     * @return
     */
    @POST("bookList/bookLikeCancel")
    Observable<Result> cancellLike(@Header("token") String token, @Query("bookId") String bookId);


    /**
     * 查询我的书单信息
     *
     * @param token
     * @param page
     * @param pageNum
     * @return
     */
    @POST("bookList/user")
    Observable<Result<MyBookListBean>> myBookList(@Header("token") String token, @Query("page") int page, @Query("pageNum") int pageNum);


    /**
     * 用户收藏书单
     *
     * @param token
     * @param bookListId 书单ID
     * @return
     */
    @POST("bookList/collection/add")
    Observable<Result> collectionBook(@Header("token") String token, @Query("bookListId") String bookListId);

    /**
     * 删除收藏的书单
     *
     * @param token
     * @param bookListId 书单ID
     * @return
     */
    @POST("bookList/collection/cancel")
    Observable<Result> deteleCollction(@Header("token") String token, @Query("bookListId") String bookListId);


    /**
     * 查看区分书单的频道
     *
     * @param gender
     * @return
     */
    @GET("bookList/channel")
    Observable<Result<List<BookLabelBean>>> collectionBook(@Query("gender") String gender);


}
